//
// Created by 麻再挺 on 2021/12/22.
//

#include "shell_sort.h"

void Shell_Sort(int arr[], int len) {
    // 交换量减小
    for (int step = len / 2; step >= 1; step /= 2) {
        // 从下标 step+1 进行直接插入排序
        for (int i = step; i < len; ++i) {
            // 临时值
            int tmp = arr[i];
            // 确定要比较元素的左侧位置
            int k = i - step;
            // 索引大于 0 并且元素值大于arr[i]
            while (k > -1 && tmp < arr[k]) {
                // 数据右移
                arr[k + step] = arr[k];
                k = k - step;
            }
            arr[k + step] = tmp;
        }
    }
}
